package abel.wlmr.model.unit;

import abel.wlmr.model.WlmrBaseUnit;
import abel.wlmr.model.WlmrException;
import abel.wlmr.model.type.CurvePointBody;
import io.netty.buffer.ByteBuf;

/**
 * 曲线类数据时标 Td_c 见本附录 B.5.11.1.3.3 7
 * 正向流量示值 1 见附录 C.29 单位代号 5
 * 
 * @author Abel
 *
 */
public class AfnSecondF401DownUnit extends WlmrBaseUnit {
    private static final short FIXED_LENGTH = 7;

    private CurvePointBody curveTdc = new CurvePointBody(CurvePointBody.FIXED_LENGTH);

    public AfnSecondF401DownUnit() {
        super();
    }

    public AfnSecondF401DownUnit(short guessedLen) {
        super(guessedLen);
    }

    /* (non-Javadoc)
     * @see abel.wlmr.model.WlmrDataPart#appendBuf(io.netty.buffer.ByteBuf)
     */
    @Override
    public ByteBuf appendBuf(ByteBuf buf) {
        curveTdc.appendBuf(buf);

        return buf;
    }

    /* (non-Javadoc)
     * @see abel.wlmr.model.AppUnitBody#parseBuf(io.netty.buffer.ByteBuf)
     */
    @Override
    public int parseBuf(ByteBuf buf) throws WlmrException {
        if (checkBuffer(buf) < 0) {
            return -1;
        }

        curveTdc.parseBuf(buf);

        return FIXED_LENGTH;
    }

    /* (non-Javadoc)
     * @see abel.wlmr.model.WlmrDataPart#getMinLength()
     */
    @Override
    public int getMinLength() {
        return FIXED_LENGTH;
    }

    /* (non-Javadoc)
     * @see abel.wlmr.model.WlmrDataPart#getFinalLen()
     */
    @Override
    public short getFinalLen() {
        return FIXED_LENGTH;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return String.format("{curveTdc:%s}", curveTdc);
    }

    /**
     * B.5.11.1.3.3 曲线类数据时标Td_c
     * 曲线类数据时标 Td_c 的长度为 7 个字节，由要求终端上传的曲线数据的起始时间 ts、数据冻结密度
     * m 和数据点数 n 组成，表示所请求或响应的曲线数据是从起始时间 ts 起，以冻结密度 m 为间隔的连续 n
     * 个点的曲线数据。数据格式见表 B.118。
     * 表B.118 曲线类数据时标 Td_c 数据格式
     * 数据内容 数据格式 字节数
     * 起始时间 ts：分时日月年 见附录 C.15 5
     * 数据冻结密度 m BIN 1
     * 数据点数 n BIN 1
     * 数据冻结密度 m 定义见附录 E
     * 
     * @return the curveTdc
     */
    public CurvePointBody getCurveTdc() {
        return curveTdc;
    }

    /**
     * B.5.11.1.3.3 曲线类数据时标Td_c
     * 曲线类数据时标 Td_c 的长度为 7 个字节，由要求终端上传的曲线数据的起始时间 ts、数据冻结密度
     * m 和数据点数 n 组成，表示所请求或响应的曲线数据是从起始时间 ts 起，以冻结密度 m 为间隔的连续 n
     * 个点的曲线数据。数据格式见表 B.118。
     * 表B.118 曲线类数据时标 Td_c 数据格式
     * 数据内容 数据格式 字节数
     * 起始时间 ts：分时日月年 见附录 C.15 5
     * 数据冻结密度 m BIN 1
     * 数据点数 n BIN 1
     * 数据冻结密度 m 定义见附录 E
     * 
     * @param curveTdc
     *            the curveTdc to set
     */
    public void setCurveTdc(CurvePointBody curveTdc) {
        if (curveTdc == null) {
            throw new IllegalArgumentException("curveTdc can't be null");
        }

        this.curveTdc = curveTdc;
    }
}
